{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0], [1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0]]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "masked_array(data = [0.041666666666666664 0.0 0.041666666666666664 0.041666666666666664\n",
       " 0.041666666666666664 0.041666666666666664 0.041666666666666664\n",
       " 0.08333333333333333 0.041666666666666664 0.125 0.0 0.041666666666666664\n",
       " 0.041666666666666664 0.0 0.041666666666666664 0.041666666666666664\n",
       " 0.041666666666666664 0.041666666666666664 0.0 0.0 0.0 0.0 0.0\n",
       " 0.041666666666666664 0.0 0.0 0.041666666666666664 0.041666666666666664 0.0\n",
       " 0.041666666666666664 0.041666666666666664 0.041666666666666664],\n",
       "             mask = [False False False False False False False False False False False False\n",
       " False False False False False False False False False False False False\n",
       " False False False False False False False False],\n",
       "       fill_value = 1e+20)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from numpy.ma import zeros\n",
    "\n",
    "\n",
    "def load_dataset():\n",
    "    posting_list = [['my', 'dog', 'has', 'flea', 'problems', 'help', 'please'],\n",
    "                   ['maybe', 'not', 'take', 'him', 'to', 'dog', 'park', 'stupid'],\n",
    "                   ['my', 'dalmation', 'is', 'so', 'cute', 'I', 'love', 'him'],\n",
    "                   ['stop', 'posting', 'stupid', 'worthless', 'garbage'],\n",
    "                   ['mr', 'licks', 'ate', 'my', 'steak', 'how', 'to', 'stop', 'him'],\n",
    "                   ['quit', 'buying', 'worthless', 'dog', 'food', 'stupid']]\n",
    "    class_vec = [0, 1, 0, 1, 0, 1]  # 1 is abusive, 0 not\n",
    "    return posting_list, class_vec\n",
    "\n",
    "\n",
    "def create_vocab_list(dataset):\n",
    "    vocabset = set([])\n",
    "    for document in dataset:\n",
    "        #取并集\n",
    "        vocabset = vocabset | set(document)\n",
    "    return list(vocabset)\n",
    "\n",
    "\n",
    "def set_of_words2_vec(vocab_list, input_set):\n",
    "    return_vec = [0] * len(vocab_list)\n",
    "    for word in input_set:\n",
    "        if word in vocab_list:\n",
    "            return_vec[vocab_list.index(word)] = 1\n",
    "    return return_vec\n",
    "\n",
    "\n",
    "def train_nb0(train_matri, train_cate):\n",
    "    num_traindoc = len(train_matri)\n",
    "    num_words = len(train_matri[0])\n",
    "    p_abusive = sum(train_cate) / float(num_traindoc)\n",
    "    p0_num = zeros(num_words)\n",
    "    p1_num = zeros(num_words)\n",
    "    p0_denom = 0.0\n",
    "    p1_denom = 0.0\n",
    "    for i in range(num_traindoc):\n",
    "        if train_cate[i] == 1:\n",
    "            p1_num += train_matri[i]\n",
    "            p1_denom += sum(train_matri[i])\n",
    "        else:\n",
    "            p0_num += train_matri[i]\n",
    "            p0_denom += sum(train_matri[i])\n",
    "    p1_vec = p1_num / p1_denom\n",
    "    p0_vec = p0_num / p0_denom\n",
    "    return p0_vec, p1_vec, p_abusive\n",
    "\n",
    "test_list, class_vec = load_dataset()\n",
    "vocab_list = create_vocab_list(test_list)\n",
    "train_matri = []\n",
    "for doc in test_list:\n",
    "    train_matri.append(set_of_words2_vec(vocab_list, doc))\n",
    "print(train_matri)\n",
    "\n",
    "p0_vec, p1_vec, p_abusive = train_nb0(train_matri, class_vec)\n",
    "p0_vec"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
